ক্লোজার (Clojure) প্রোগ্রামিং ভাষায়, List এবং Vector দুটি গুরুত্বপূর্ণ ডেটা কাঠামো, যা ডেটা সংরক্ষণ এবং পরিচালনার জন্য ব্যবহার হয়। এই ডেটা কাঠামোগুলির সাথে ইটারেশন (Iteration) করার জন্য ক্লোজার বিভিন্ন শক্তিশালী ফাংশন সরবরাহ করে। এর মাধ্যমে আমরা সহজেই প্রতিটি উপাদান এক্সেস, পরিবর্তন এবং প্রক্রিয়া করতে পারি।
ক্লোজারে লিস্ট এবং ভেক্টরের সাথে ইটারেশন করার জন্য বিভিন্ন ফাংশন এবং কৌশল রয়েছে, যেমন map
, filter
, reduce
, doseq
, for
, ইত্যাদি।
map
ফাংশনmap
একটি খুবই শক্তিশালী ফাংশন যা একটি ফাংশনকে লিস্ট বা ভেক্টরের প্রতিটি উপাদানের উপর প্রয়োগ করে একটি নতুন ডেটা কাঠামো তৈরি করে। এটি ফাংশনাল প্রোগ্রামিংয়ের একটি গুরুত্বপূর্ণ অংশ।
map
ব্যবহার করে লিস্ট এবং ভেক্টরের উপর ইটারেশন(def my-list '(1 2 3 4))
(def my-vector [1 2 3 4])
; লিস্টের প্রতি উপাদানে ২ যোগ করা
(map #( + % 2) my-list) ; আউটপুট: (3 4 5 6)
; ভেক্টরের প্রতি উপাদানে ২ যোগ করা
(map #( + % 2) my-vector) ; আউটপুট: (3 4 5 6)
এখানে, map
ফাংশনটি একটি অ্যানোনিমাস ফাংশন (lambda) ব্যবহার করে লিস্ট এবং ভেক্টরের প্রতিটি উপাদানের ওপর + 2
অপারেশন চালায়।
filter
ফাংশনfilter
ফাংশনটি একটি শর্তের ভিত্তিতে লিস্ট বা ভেক্টর থেকে নির্বাচিত উপাদানগুলি ফিল্টার করে এবং নতুন একটি লিস্ট প্রদান করে। এটি শুধুমাত্র সেই উপাদানগুলো রাখে যেগুলি শর্ত পূরণ করে।
filter
ব্যবহার করে লিস্ট এবং ভেক্টরের উপর ইটারেশন; লিস্টের মধ্যে ৩ এর বড় সংখ্যাগুলো বের করা
(filter #(> % 3) my-list) ; আউটপুট: (4)
; ভেক্টরের মধ্যে ৩ এর বড় সংখ্যাগুলো বের করা
(filter #(> % 3) my-vector) ; আউটপুট: (4)
এখানে, filter
ফাংশনটি একটি শর্ত (> 3
) চেক করে এবং শুধুমাত্র সেই উপাদানগুলো রেখে দেয় যেগুলি শর্ত পূরণ করে।
reduce
ফাংশনreduce
ফাংশনটি একটি অ্যাকিউমুলেটর ব্যবহার করে লিস্ট বা ভেক্টরের উপাদানগুলির উপর একটি অ্যাগ্রিগেট অপারেশন (যেমন যোগ, গুণ, ইত্যাদি) করে। এটি একক মানে রেজাল্ট প্রদান করে।
reduce
ব্যবহার করে লিস্ট এবং ভেক্টরের উপর ইটারেশন; লিস্টের উপাদানগুলোর যোগফল বের করা
(reduce + my-list) ; আউটপুট: 10
; ভেক্টরের উপাদানগুলোর যোগফল বের করা
(reduce + my-vector) ; আউটপুট: 10
এখানে, reduce
ফাংশনটি +
অপারেশন ব্যবহার করে লিস্ট এবং ভেক্টরের উপাদানগুলির যোগফল হিসাব করে।
doseq
ফাংশনdoseq
একটি ইটারেটিভ ফাংশন যা সাইড-এফেক্ট তৈরি করতে ব্যবহৃত হয়, যেমন একটি ভেক্টর বা লিস্টের প্রতিটি উপাদানে কিছু কাজ করা (উদাহরণস্বরূপ, প্রিন্ট করা)। এটি মূলত লুপিংয়ের মতো কাজ করে।
doseq
ব্যবহার করে লিস্ট এবং ভেক্টরের উপর ইটারেশন; লিস্টের প্রতিটি উপাদান প্রিন্ট করা
(doseq [x my-list]
(println x)) ; আউটপুট: 1 2 3 4
; ভেক্টরের প্রতিটি উপাদান প্রিন্ট করা
(doseq [x my-vector]
(println x)) ; আউটপুট: 1 2 3 4
এখানে, doseq
লিস্ট এবং ভেক্টরের প্রতিটি উপাদানকে প্রিন্ট করে।
for
ফাংশনfor
একটি কম্প্যাক্ট ফাংশন যা একটি পদ্ধতির মাধ্যমে একাধিক শর্ত এবং সিকোয়েন্সের উপর ইটারেশন করতে ব্যবহৃত হয়। এটি একটি লিস্ট কম্প্রিহেনশন স্টাইল ফাংশন, যেখানে শর্ত, ফিল্টার এবং মডিফিকেশন একত্রে ব্যবহৃত হয়।
for
ব্যবহার করে লিস্ট এবং ভেক্টরের উপর ইটারেশন; লিস্টের সকল উপাদানে ২ যোগ করা
(for [x my-list]
(+ x 2)) ; আউটপুট: (3 4 5 6)
; ভেক্টরের সকল উপাদানে ২ যোগ করা
(for [x my-vector]
(+ x 2)) ; আউটপুট: (3 4 5 6)
এখানে, for
ফাংশনটি লিস্ট বা ভেক্টরের প্রতিটি উপাদানে + 2
অপারেশন চালিয়ে নতুন লিস্ট তৈরি করছে।
doseq
বনাম for
ফাংশন | উদ্দেশ্য | ব্যবহার |
---|---|---|
doseq | সাইড-এফেক্ট তৈরি করতে ব্যবহৃত (উদাহরণস্বরূপ, প্রিন্ট করা) | doseq ব্যবহৃত হয় যখন ফলাফল প্রয়োজন নয়, শুধু কাজটি করা দরকার |
for | নতুন সংগ্রহ তৈরি করতে ব্যবহৃত | for ব্যবহৃত হয় যখন নতুন ডেটা কাঠামো তৈরি করতে হয় |
ক্লোজারে List এবং Vector এর সাথে ইটারেশন করার জন্য বিভিন্ন শক্তিশালী কৌশল ও ফাংশন রয়েছে:
map
: প্রতিটি উপাদানে একটি ফাংশন প্রয়োগ করে একটি নতুন সংগ্রহ তৈরি করে।filter
: শর্ত অনুসারে উপাদানগুলো ফিল্টার করে একটি নতুন সংগ্রহ তৈরি করে।reduce
: একটি অ্যাকিউমুলেটর ব্যবহার করে উপাদানগুলোর উপর একটি অ্যাগ্রিগেট অপারেশন করে।doseq
: সাইড-এফেক্ট তৈরির জন্য ব্যবহৃত (যেমন প্রিন্ট করা)।for
: লিস্ট কম্প্রিহেনশন স্টাইলের ফাংশন, যেখানে শর্ত এবং ফিল্টার ব্যবহৃত হয়।এই ফাংশনগুলো ক্লোজারে লিস্ট এবং ভেক্টরের উপর ইটারেশন ও ডেটা ম্যানিপুলেশনের জন্য খুবই শক্তিশালী এবং নমনীয়।
common.read_more